/**
 * Copyright &copy; 2015-2020 <a href="www.dsesa.cn/">ESA</a> All rights reserved.
 */
package com.jeeplus.core.service;

import java.util.List;

import com.jeeplus.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;

import com.jeeplus.core.persistence.BaseEntity;
import com.jeeplus.modules.sys.entity.DataRule;
import com.jeeplus.modules.sys.utils.UserUtils;

/**
 * Service基类
 * @author jeeplus
 * @version 2017-05-16
 */
@Transactional(readOnly = true)
public abstract class BaseService {
	
	/**
	 * 日志对象
	 */
	protected Logger logger = LoggerFactory.getLogger(getClass());

	
	/**
	 * 数据范围过滤
	 * @param entity 当前过滤的实体类
	 */
	public static void dataRuleFilter(BaseEntity<?> entity) {

		entity.setCurrentUser(UserUtils.getUser());
		List<DataRule> dataRuleList = UserUtils.getDataRuleList();
		
		// 如果是超级管理员，则不过滤数据
		if (dataRuleList.size() == 0) {
			return;
		}

		// 数据范围
		StringBuilder sqlString = new StringBuilder();

		
//			for(DataRule dataRule : dataRuleList){//for(int i=0;i<dataRuleList;i++)
//				if(entity.getClass().getSimpleName().equals(dataRule.getClassName())){
//					//if(i==0){
//					//sqlString.append("and (")
//					//sqlString.append(dataRule.getDataScopeSql());
//					//sqlString.append(")")
//					sqlString.append(dataRule.getDataScopeSql());
//				}
//
//			}
		for(int i=0;i<dataRuleList.size();i++){
			/*System.out.println(entity.getClass().getSimpleName()+"====="+dataRuleList.get(i).getClassName());*/
			if(entity.getClass().getSimpleName().equals(dataRuleList.get(i).getClassName())){//根据类名筛选数据规则
				if(!StringUtils.isNotBlank(sqlString)){//自定义sqlString为空，加上‘and （’
					sqlString.append("and (");
					sqlString.append(dataRuleList.get(i).getDataScopeSql(true));
				}else {
					sqlString.append(dataRuleList.get(i).getDataScopeSql(false));
				}
			}
		}
		if(StringUtils.isNotBlank(sqlString)){//自定义sqlString不为空，加上‘）’
			sqlString.append(")");
		}
		entity.setDataScope(sqlString.toString());
		
	}

}
